﻿using System.Text;
using System.Text.RegularExpressions;

namespace Service.Framework.Utils
{
    public static class StringUtil
    {
        //
        // 摘要:
        //     string
        //
        // 参数:
        //   value:
        //
        // 类型参数:
        //   T:
        public static string? ToStr<T>(this T value)
        {
            return (value == null) ? string.Empty : value.ToString();
        }

        //
        // 摘要:
        //     首字母小写写
        //
        // 参数:
        //   input:
        public static string ToFirstCharConvertLower(this string input)
        {
            if (string.IsNullOrWhiteSpace(input))
            {
                return input;
            }

            return input.First().ToString().ToLower() + input.Substring(1);
        }

        //
        // 摘要:
        //     首字母大写
        //
        // 参数:
        //   input:
        public static string ToFirstCharConvertUpper(this string input)
        {
            if (string.IsNullOrWhiteSpace(input))
            {
                return input;
            }

            return input.First().ToString().ToUpper() + input.Substring(1);
        }

        //
        // 摘要:
        //     蛇形命名 转化为 驼峰命名
        //
        // 参数:
        //   name:
        public static string ToLineConvertHump(this string name)
        {
            if (!name.Contains('_') && name != name.ToLower())
            {
                return name;
            }

            StringBuilder stringBuilder = new StringBuilder();
            string[] array = name.Split("_", StringSplitOptions.RemoveEmptyEntries);
            foreach (string str in array)
            {
                stringBuilder.Append(Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str));
            }

            return stringBuilder.ToString();
        }

        //
        // 摘要:
        //     将驼峰命名法改为 下划线 命名法
        //
        // 参数:
        //   input:
        public static string ToHumpConvertLine(this string input)
        {
            if (string.IsNullOrWhiteSpace(input))
            {
                return input;
            }

            return Regex.Replace(input, "([a-z0-9])([A-Z])", "$1_$2").ToLower();
        }

        //
        // 摘要:
        //     中横线转驼峰命名
        //
        // 参数:
        //   name:
        public static string ToLineMiddleConvertHump(this string name)
        {
            if (!name.Contains('-') && name != name.ToLower())
            {
                return name;
            }

            StringBuilder stringBuilder = new StringBuilder();
            string[] array = name.Split("-", StringSplitOptions.RemoveEmptyEntries);
            foreach (string str in array)
            {
                stringBuilder.Append(Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str));
            }

            return stringBuilder.ToString();
        }

        //
        // 摘要:
        //     驼峰转中横线命名
        //
        // 参数:
        //   input:
        public static string ToHumpConvertLineMiddle(this string input)
        {
            if (string.IsNullOrWhiteSpace(input))
            {
                return input;
            }

            return Regex.Replace(input, "([a-z0-9])([A-Z])", "$1-$2").ToLower();
        }
    }
}
